Newer
Older
pixi.js / examples / example 1 - Basics / mark.html
@Chad Engler Chad Engler on 10 Jan 2015 4 KB add bunny mark benchmark baseliner
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">

        <title>Pixi.js - Basic Usage</title>

        <style>
            * {
              box-sizing: border-box;
            }
            #view {
              position: absolute;
              top: 0;
              left: 0;
              z-index: -1;
            }
        </style>

        <script src="../../bin/pixi.dev.js"></script>
        <script src="stats.min.js"></script>
    </head>

    <body>
        <div id="wrapper">
            <canvas id="view" width="960" height="720"></canvas>

            <div id="counter"></div>
            <label>
                <input type="checkbox" id="useSpriteBatch" />
                Use SpriteBatch
            </label>

        </div>

        <script>
                // starting number based on renderer type
            var startingNum = 50,
                // create a texture from an image path
                tx1 = PIXI.Texture.fromImage('bunny.png'),
                // create a sprite batch to contain our sprites
                container = new PIXI.SpriteBatch(),
                // get the counter element so we can update the text
                counter = document.getElementById('counter'),
                // tracker for mouse/touch down state
                isAdding = false,
                // we are going to fake some gravity in the update loop
                gravity = 0.75;

            // use nearest scaling so sprites are crisp and pixely
            PIXI.scaleModes.DEFAULT = PIXI.scaleModes.NEAREST;

            // create an new instance of a pixi stage
            var stage = new PIXI.Stage(0xFFFFFF);

            // create a renderer instance
            var renderer = PIXI.autoDetectRenderer(window.innerWidth, window.innerHeight, { view: document.getElementById('view') });

            // add our container to the root
            // stage.addChild(container);
            container = stage;

            // add the first bunnies!
            createBunnies();

            // setup our tick method called each frame
            var stats = new Stats();
            stats.domElement.style.position = 'absolute';
            stats.domElement.style.top = '0';
            stats.domElement.style.right = '0';
            document.body.appendChild(stats.domElement);

            animate();

            function animate() {
                stats.begin();

                // start timer for next loop
                requestAnimationFrame(animate);

                // if we are adding bunnies, then do it!
                if (isAdding) {
                    createBunnies();
                }

                // go through each bunny and update it to dance a bit
                for (var j = 0; j < container.children.length; ++j) {
                    var bunny = container.children[j];

                    bunny.position.x += bunny.speedX;
                    bunny.position.y += bunny.speedY;

                    bunny.speedY += gravity;

                    if (bunny.position.x > renderer.width) {
                        bunny.speedX *= -1;
                        bunny.position.x = renderer.width;
                    }
                    else if (bunny.position.x < 0) {
                        bunny.speedX *= -1;
                        bunny.position.x = 0;
                    }

                    if (bunny.position.y > renderer.height) {
                        bunny.speedY *= -0.85;
                        bunny.position.y = renderer.height;

                        if (Math.random() > 0.5) {
                            bunny.speedY -= Math.random() * 6;
                        }
                    }
                    else if (bunny.position.y < 0) {
                        bunny.speedY *= -1;
                        bunny.position.y = 0;
                    }
                }

                renderer.render(stage);

                stats.end();
            }

            renderer.view.addEventListener('mousedown', startAdd, false);
            renderer.view.addEventListener('touchstart', startAdd, false);

            renderer.view.addEventListener('mouseup', startEnd, false);
            renderer.view.addEventListener('touchend', startEnd, false);

            function startAdd() { isAdding = true; }
            function startEnd() { isAdding = false; }

            function createBunnies(num) {
                num = num || startingNum;

                for (var i = 0; i < num; ++i) {
                    var bunny = new PIXI.Sprite(tx1);

                    bunny.speedX = Math.random() * 5;
                    bunny.speedY = (Math.random() * 5) - 5;

                    bunny.anchor.set(0.5, 1);

                    container.addChild(bunny);
                }

                counter.innerHTML = container.children.length + ' bunnies';
            }
        </script>
    </body>
</html>